﻿/*
===========================================================================
Immemorsion LGPL Source code
Copyright trszdev - rahimyanov@gmail.com

This file is part of Immemorsion.

Immemorsion is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Immemorsion is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Immemorsion.  If not, see <http://www.gnu.org/licenses/>.
===========================================================================
*/
using System;
using System.Diagnostics;
using Immemorsion.PlatformApi;

namespace Immemorsion
{
    public class ProcessMemoryReader : WindowsProcessCommunicator, IProcessMemoryReader
    {

        public ProcessMemoryReader(Process process)
            : base(process)
        { }

        public byte[] ReadAddress(MemoryAddress memoryAddress, int numBytes)
        {
            var bytes = new byte[numBytes];
            IntPtr bytesRead;
            WindowsApi.ReadProcessMemory(ProcessHandle, (IntPtr)memoryAddress.Value, bytes, (uint)numBytes, out bytesRead);
            return bytesRead.ToInt32() == numBytes ? bytes : null; 
        }

    }
}
